﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;

namespace exercice4
    {
    /// <summary>
    /// Class mère de tous les véhicules
    /// </summary>
    public abstract class Vehicule
        {
        public Vehicule(String nom)
            {
            this.m_nom = nom;
            this.m_isDisponible = true;
            this.m_nbJoursLoues = 0;
            }

        //identique pour toutes les classes filles
        public virtual void dormir()
            {
            this.m_nbJoursLoues++;
            }

        //identique pour toutes les classes filles
        public virtual void retourner()
            {
            this.m_isDisponible = true;
            StringBuilder affichage = new StringBuilder();
            affichage.Append("prix : " + this.calculerPrix().ToString("C2"));
            System.Console.WriteLine("*******************");
            System.Console.WriteLine(affichage);
            System.Console.WriteLine("*******************");
            }

        //a surcharger que pour les véhicules à moteur
        public virtual void louer()
            {
            this.m_nbJoursLoues = 0;
            this.m_isDisponible = false;
            }

        //a surcharger que pour les véhicules à moteur
        public virtual void afficher()
            {
            System.Console.WriteLine("nom : " + this.m_nom);
            System.Console.WriteLine("disponibilité : " + this.m_isDisponible);
            }

        //a surcharger que pour les véhicules à moteur
        public virtual void rouler(double km)
            {
            //rien
            }

        public abstract double calculerPrix();
        
        public String nom { get { return this.m_nom; } }
        public bool isDisponible { get { return this.m_isDisponible; } }
        public Int32 nbJoursLoues { get { return this.m_nbJoursLoues; } }

        protected String m_nom;
        protected bool m_isDisponible;
        protected Int32 m_nbJoursLoues;
        }
    }
